// miniprogram/pages/chooseColor/index.js

Page({

  /**
   * 页面的初始数据
   */
  data: {
    color: null, //meta20的颜色
    P30Color: null, //p30的颜色
    step: 1, //步骤条
    choosedByOther: false, //该用户是否已被别的微信号选择过颜色。
    bindId: false, //该微信号是否已经绑定过选择人：对于重选-身份证号固定不可修改
    id: null, //身份证号
    //供确认也使用的身份证信息
    name: null, //身份证对应的人名
    createBy_name: null, //选色用户微信名
    createBy_avator: null, //选色用户头像
    editTime_text: "", //选色时间-文本形式
    choosedColor: "", //选择的颜色
    choseeHotColor: false,
    hot_color_desc: "紧俏颜色需要等货。如果想第一时间拿到新机，可选择亮黑色、极光色"
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function(options) {
    if (options) {
      //console.log("choose color onLoad:", options)
      this.setData({
        id: options.id ? options.id : null,
        bindId: options.id ? true : false,
        name: options.name ? options.name : null,
        step: options.step ? options.step : 1,
      });
    }
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function() {

  },

  onColorChange: function(e) {
    var id = e.currentTarget.dataset.id;
    this.setData({
      P30Color: id
    })
  },

  onIdChange: function(e) {
    this.setData({
      id: e.detail.value
    })
  },

  nextStep: function() {
    if (this.data.step == 1 && this.data.P30Color == null) {
      wx.showToast({
        title: '尚未选择颜色',
        icon: 'none',
        duration: 2000
      })
    } else if (this.data.step == 2 && !this.checkIdCard(this.data.id)) {
      wx.showToast({
        title: '身份证号码有误',
        duration: 2000,
        icon: 'none'
      });
    } else {
      this.setData({
        step: this.data.step + 1,
      })
    }
  },

  prevStep: function() {
    this.setData({
      step: this.data.step - 1
    })
  },

  checkIdCard: function(idVar) {
    if ((/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(idVar))) {
      return true
    }
    return false
  },

  checkName: function(name) {
    /*验证名字，现已去掉因为有点多余 */
    // if (!(/^[\u4e00-\u9fa5]+$/.test(e.detail.value.name))) {
    //   wx.showToast({
    //     title: '姓名须汉字，不能有空格',
    //     duration: 2000,
    //     icon: 'none'
    //   });
    //   return false;
    // }
  },

  formSubmit(e) {
    let id = e.detail.value.id;
    if (this.checkIdCard(id)) {
      let deviceColor = this.P30Color;
      this.queryById(id).then(data => {
        if (data) {
          let myOpenId = getApp().globalData.openId;
          let choosedByOther = false;
          if (data.p30_choosedBy && myOpenId && myOpenId !== data.p30_choosedBy) {
            //openId存在说明已有其他微信账号帮他选色了
            choosedByOther = true;
          } else {
            //如果是第一次选择，记录用户选择的颜色在确认页面显示。
            data.P30Color = this.data.P30Color;
          }
          //准备数据供确认页使用
          //获取服务器时间
          let now = new Date();
          wx.cloud.callFunction({
            name: 'utils',
            data: {
              req: 'now'
            }
          }).then(utilsResp => {
            if (utilsResp.result) {
              let now = URIError.result;
            }
            this.setData({
              choosedColor: choosedByOther ? data.P30Color : this.data.P30Color,
              createBy_name: choosedByOther ? data.createBy_name : getApp().globalData.userInfo.nickName,
              createBy_avatar: choosedByOther ? data.createBy_avatarUrl : getApp().globalData.userInfo.avatarUrl,
              name: data.name,
              editTime_text: this.format(choosedByOther ? data.editTime : now),
              choosedByOther: choosedByOther,
              id: id,
              step: this.data.step + 1,
            });
            this.hotColor(this.data.choosedColor);
          }).catch(err => {
            console.error('[云函数] [utils] 调用失败', err)
            wx.showToast({
              icon: "none",
              title: '获取服务器时间失败',
            })
          });

        }
      });
    } else {
      wx.showToast({
        title: '身份证号码有误',
        duration: 2000,
        icon: 'none'
      });
    }
  },

  queryById: function(id) {
    return new Promise((resolve, reject) => {
      const db = wx.cloud.database();
      db.collection('JWDevice_distribute').doc(id).get().then(res => {
        resolve(res.data);
      }).catch(err => {
        console.error('[数据库] [查询记录] 失败：', err)
        if (err.errCode == -1) {
          wx.showToast({
            icon: 'none',
            title: '该用户不在发放范围'
          });
          resolve(false);
        } else {
          wx.showToast({
            icon: 'none',
            title: '查询记录失败'
          })
          reject(err);
        }
      });
    });
  },

  onChoose: function() {
    this.updateColor({
      _id: this.data.id,
      P30Color: this.data.P30Color
    });
  },

  updateColor: function(data) {
    //console.log("UPDATE ID:" + res.data[0]._id)
    //console.log("glable", getApp().globalData);
    //获取服务器时间
    wx.cloud.callFunction({
      name: 'utils',
      data: {
        req: 'now'
      }
    }).then(utilsResp => {
      // 调用云函数更新
      var updateData = {
        table: 'JWDevice_distribute',
        id: data._id,
        value: {
          P30Color: data.P30Color,
          done: true,
          editTime: utilsResp.result,
          p30_choosedBy: getApp().globalData.openId,
          createBy_name: getApp().globalData.userInfo.nickName,
          createBy_avatar: getApp().globalData.userInfo.avatarUrl
        },
      }
      console.debug(updateData);
      console.debug(wx.cloud.database().serverDate());

      wx.cloud.callFunction({
        name: 'update',
        data: updateData
      }).then(res => {
        wx.redirectTo({
          url: '../showResult/showResult?id=' + data._id,
        })
      }).catch(err => {
        console.error('[云函数] [UPDATE] 调用失败', err)
        wx.showToast({
          icon: "none",
          title: '[云函数] [UPDATE] 调用失败',
        })
      });
    }).catch(err => {
      console.error('[云函数] [utils] 调用失败', err)
      wx.showToast({
        icon: "none",
        title: '获取服务器时间失败',
      })
    });
  },

  setHotColor: function() {
    const conf = wx.cloud.database().collection('JWDevice_Conf').doc("welcome_text")
    conf.get().then(res => {
      this.setData({
        choseeHotColor: true,
        hot_color_desc: res.data.hot_color_desc,
      })
    });
  },

  hotColor: function(color) {
    if (color === "天空之境" || color === "珠光母白") {
      this.setHotColor()
    } else {
      this.setData({
        choseeHotColor: false,
      })
    }
  },
  formReset() {
    this.setData({
      color: null,
      step: 1,
    })
  },

  format: function(timestamp) {
    //timeSteamp是整数，否则要parseInt转换
    var time = new Date(timestamp);
    var y = time.getFullYear();
    var m = time.getMonth() + 1;
    var d = time.getDate();
    var h = time.getHours();
    var mm = time.getMinutes();
    var s = time.getSeconds();
    return y + '年' + this.add0(m) + '月' + this.add0(d) + '日 ' + this.add0(h) + ':' + this.add0(mm) + ':' + this.add0(s);
  },
  add0: function(m) {
    return m < 10 ? '0' + m : m
  },
})